menu "MTK load balance and schedule enhancement"

config MTK_IDLE_BALANCE_ENHANCEMENT
	bool "mtk load balance enhancement"
	depends on SMP
	default n
	help
	  Mediatek aggressive idle balance, include
	  1. for runnable tasks with idle prefer attributes
	  2. for runnable and running tasks with min_cap(dynamic floor)
	  3. migrate runnable task directly and
		use stop machine to migrate running task

config MTK_SCHED_INTEROP
	bool "mtk scheduling interopation enhancement"
	default y
	help
	   Original Linux Design, RT & CFS do load balance seperatedly,
	   and let would result in unload balance.
	   that is, one CPU has more than 2 tasks, however, one CPU is IDLE
	   We make RT & CFS to check each other and make load more balance.

config MTK_SCHED_TRACE
	bool "mtk scheduling trace, output mtk schedule trace into FTRACE"
	default n
	help
	  MTK scheduling trace, output schedule trace into FTRACE
	  the ftrace api for scheduling is mt_sched_printf and
	  used for scheduling module to output info to ftrace
	  Say Y to enable mtk scheduling trace

config MTK_SCHED_DEBUG
	bool "mtk scheduling log, also output schedule log into Kernel log"
	depends on MTK_SCHED_TRACE
	default n
	help
	  MTK scheduling log, add scheduling log into Kernel log.
	  Including print scheduler debug information at KE and print
	  load balance information at kernel log.
	  Say no if not sure.

endmenu
menu "MTK Energy Aware Scheduler Plus"
config MTK_SCHED_EAS_POWER_SUPPORT
	bool "Enable MTK power calculation for EAS"
	depends on MTK_UNIFY_POWER
	default n
	help
	  Power calculation for mtk Soc.
	  According to platform characters(share-buck..etc),
	  return correct power of core and cluster for
	  scheduler to refer.

config MTK_SCHED_MULTI_GEARS
	bool "MTK enhancmenet for mutl CPU gears"
	depends on MTK_SCHED_EAS_POWER_SUPPORT
	default n
	help
	  MTK enhancement for multi CPU gears
	  1. share buck aware
	     use max frequency for dynamic and static power in shared buck
	  2. select a CPU in each CPU gears for energy diff

config MTK_SCHED_BL_FIRST
	bool "MTK enhancmenet for mutl CPU gears if hope put BL first"
	depends on MTK_SCHED_MULTI_GEARS
	default n
	help
	  Default is sorting the CPU domain from little to Big.
	  This KCONFIG will support to prefer to
	  put BL in Big domain for performance/power/thermal
	  and so on consideration.
endmenu

menu "MTK Heterogenous MultiProcessor Scheduler"

config SCHED_HMP
	bool "Heterogenous multiprocessor scheduling"
	default n
	depends on SCHED_MC && FAIR_GROUP_SCHED && !SCHED_AUTOGROUP
	help
	  Scheduler optimizations for heterogeneous platforms.
	  Attempts to introspectively select task affinity to
	  optimize power and performance. Basic support for multiple (>2)
	  cpu types is in place, but it has only been tested with two
	  types of cpus.
	  There is currently no support for migration of task groups, hence
	  !SCHED_AUTOGROUP.

config SCHED_HMP_PRIO_FILTER
	bool "(EXPERIMENTAL) Filter HMP migrations by task priority"
	default y
	depends on SCHED_HMP
	help
	  Enables task priority based HMP migration filter. Any task with
	  a NICE value above the threshold will always be on low-power cpus
	  with less compute capacity.
	  If unsure say N here.

config SCHED_HMP_PRIO_FILTER_VAL
	int "NICE priority threshold"
	default 5
	depends on SCHED_HMP_PRIO_FILTER

config HMP_FREQUENCY_INVARIANT_SCALE
	bool "(EXPERIMENTAL) Frequency-Invariant Tracked Load for HMP"
	depends on !ARCH_SCALE_INVARIANT_CPU_CAPACITY
	help
	  Scales the current load contribution in line with the frequency
	  of the CPU that the task was executed on.
	  In this version, we use a simple linear scale derived from the
	  maximum frequency reported by CPUFreq.
	  Restricting tracked load to be scaled by the CPU's frequency
	  represents the consumption of possible compute capacity
	  (rather than consumption of actual instantaneous capacity as
	  normal) and allows the HMP migration's simple threshold
	  migration strategy to interact more predictably with CPUFreq's
	  asynchronous compute capacity changes.

config SCHED_HMP_PLUS
	bool "(EXPERIMENTAL) Corepilot enhancement"
	depends on SCHED_HMP
	default y
	help
	  Corepilot hmp enhancement.
	  1. Do hmp_idle_pull at idle_balance
	  2. At global balance, consider the tasks in rq,
	  move heaviest/lightest of first 5 tasks in rq.
	  3. Enhance down migration rule: Do not migrate task when big core
	  is idle

config MTK_SCHED_BOOST
	bool "mtk scheduling boost enhancement"
	depends on SCHED_DEBUG && CPUSETS && SCHED_HMP && \
		DEFAULT_USE_ENERGY_AWARE
	default n
	help
	  Sched Boost type:
	  0:  cancel sched boost
	  1:  prefer boost  ALL tasks to big cores
	  2:  foreground task move to big cores
endmenu

menu "MTK runqueue statistic calculation"

config MTK_SCHED_RQAVG_KS
	bool "Enable runqueue stat calculation used in kernel space operation"
	depends on SMP && SCHED_HMP
	help
	  MTK ruqueue statistic kernel space CPUfreq governors, e.g., hotplug
	  TLP estimation,
	  heavy task detection and
	  per CPU load for kernel space CPUfreq governors

config MTK_SCHED_RQAVG_US
	bool "Enable runqueue stat calculation used in user space operation"
	depends on SMP && SCHED_HMP && HIGH_RES_TIMERS
	help
	  MTK runqueue staticsic calculation
	  used in user space operation.
	  TLP estimation for user space
	  CPUfreq governors.

config MTK_SCHED_CPULOAD
	bool "Enable timing-base CPU loading tracking in scheduler"
	depends on MTK_SCHED_RQAVG_US
	help
	  Support timing-base CPU loading tracking
	  in scheduler tick.
	  Which helps load tracking in time-base view
	  and more quick response in loading change.

config MTK_SCHED_SYSHINT
	bool "Enable asynchronus hint to get loading change in time"
	help
	  Support asynchronus hint for external modules
	  to get loading change notification from scheduler
	  in time that helps resource control
	  in low latency.

config MTK_RT_THROTTLE_MON
	bool "mtk rt throttle monitor"
	default n
	help
	  MTK_RT_THROTTLE_MON is used to monitor rt throttle.
	  When rt throttle activated print 5 longest execusion time rt tasks.
	  Say Y here to enable rt throttle monitor.
	  If you are not sure about whether to enable it or not, please set n.
endmenu
